home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 5 / Apprentice-Release5.iso / Source Code / C / Frameworks / TransSkel 3.24 / Demos / C Demos / HierMenu / HierMenu.c next >
Text File  |  1995-03-21  |  4KB  |  147 lines

  1. /*
  2.  * Simple application showing how to create hierarchical menus with TransSkel.
  3.  *
  4.  * Nothing is actually done with any of the menu selections except Quit from
  5.  * the File menu.
  6.  *
  7.  * 16 Feb 94 Version 1.00, Paul DuBois
  8.  * 21 Feb 94
  9.  * - Updated for TransSkel 3.11.
  10.  * 21 Mar 95
  11.  * - Updated for TransSkel 3.19.
  12.  */
  13.  
  14. # include    "TransSkel.h"
  15.  
  16.  
  17. # define    aboutAlrtRes    1000        /* About box resource number*/
  18.  
  19.  
  20. # define    fileMenuNum        1000        /* File menu */
  21. # define    demoMenuNum        1001        /* Demo menu */
  22. # define    sub1MenuNum        231            /* Demo menu submenus */
  23. # define    sub2MenuNum        232
  24. # define    sub3MenuNum        233
  25. # define    demo2MenuNum    1005        /* Demo2 menu resource number */
  26. # define    sub21MenuNum    241            /* Demo2 menu submenus */
  27. # define    sub22MenuNum    242
  28. # define    sub23MenuNum    243
  29.  
  30.  
  31. /* file menu item numbers */
  32.  
  33. typedef enum
  34. {
  35.     quit = 1
  36. };
  37.  
  38.  
  39.  
  40. /* -------------------------------------------------------------------- */
  41. /*                        Menu handling procedures                        */
  42. /* -------------------------------------------------------------------- */
  43.  
  44.  
  45. /*
  46.  * Handle selection of "About Hello..." item from Apple menu
  47.  */
  48.  
  49. static pascal void
  50. DoAppleMenu (short item)
  51. {
  52.     (void) SkelAlert (aboutAlrtRes, SkelDlogFilter (nil, true),
  53.                                         skelPositionOnParentDevice);
  54.     SkelRmveDlogFilter ();
  55. }
  56.  
  57.  
  58. /*
  59.  * Process selection from File menu.
  60.  */
  61.  
  62. static pascal void
  63. DoFileMenu (short item)
  64. {
  65.     switch (item)
  66.     {
  67.     case quit:
  68.         SkelStopEventLoop ();
  69.         break;
  70.     }
  71. }
  72.  
  73.  
  74. /*
  75.  * Initialize menus.  Tell TransSkel to process the Apple menu
  76.  * automatically, and associate the proper procedure with the
  77.  * File menu.
  78.  *
  79.  * \311 is the ellipsis character.
  80.  */
  81.  
  82. static void
  83. SetupMenus (void)
  84. {
  85. MenuHandle    m;
  86.  
  87.     SkelApple ("\pAbout HierMenu\311", DoAppleMenu);
  88.     m = NewMenu (fileMenuNum, "\pFile");
  89.     AppendMenu (m, "\pQuit/Q");
  90.     (void) SkelMenu (m, DoFileMenu, nil, false, false);
  91.  
  92.     /*
  93.      * Create hierarchical menu using NewMenu().  The parent menu
  94.      * items are specified as having submenus by indicating 033 (0x1b)
  95.      * as the command-key equivalent.  The submenus are attached by
  96.      * specifying the submenu numbers as the item mark numbers for
  97.      * items in the parent menu.
  98.      */
  99.  
  100.     m = NewMenu (demoMenuNum, "\pDemo");
  101.     AppendMenu (m, "\pItem 1/\033;Item 2/\033;Item 3/\033");
  102.     SetItemMark (m, 1, sub1MenuNum);
  103.     SetItemMark (m, 2, sub2MenuNum);
  104.     SetItemMark (m, 3, sub3MenuNum);
  105.     (void) SkelMenu (m, nil, nil, false, false);
  106.     m = NewMenu (sub1MenuNum, "\p");
  107.     AppendMenu (m, "\pSubitem 1.1;Subitem 1.2;Subitem 1.3");
  108.     (void) SkelMenu (m, nil, nil, true, false);
  109.     m = NewMenu (sub2MenuNum, "\p");
  110.     AppendMenu (m, "\pSubitem 2.1;Subitem 2.2;Subitem 2.3");
  111.     (void) SkelMenu (m, nil, nil, true, false);
  112.     m = NewMenu (sub3MenuNum, "\p");
  113.     AppendMenu (m, "\pSubitem 3.1;Subitem 3.2;Subitem 3.3");
  114.     (void) SkelMenu (m, nil, nil, true, false);
  115.  
  116.     /*
  117.      * Create hierarchical menu from resources using GetMenu().
  118.      * All the submenu information is specified in the resources.
  119.      */
  120.  
  121.     m = GetMenu (demo2MenuNum);
  122.     (void) SkelMenu (m, nil, nil, false, false);
  123.     m = GetMenu (sub21MenuNum);
  124.     (void) SkelMenu (m, nil, nil, true, false);
  125.     m = GetMenu (sub22MenuNum);
  126.     (void) SkelMenu (m, nil, nil, true, false);
  127.     m = GetMenu (sub23MenuNum);
  128.     (void) SkelMenu (m, nil, nil, true, false);
  129.  
  130.     DrawMenuBar ();
  131. }
  132.  
  133.  
  134. /* -------------------------------------------------------------------- */
  135. /*                                    Main                                */
  136. /* -------------------------------------------------------------------- */
  137.  
  138.  
  139. int
  140. main (void)
  141. {
  142.     SkelInit ((SkelInitParamsPtr) nil);    /* initialize */
  143.     SetupMenus ();                        /* install menu handlers */
  144.     SkelEventLoop ();                    /* loop 'til Quit selected */
  145.     SkelCleanup ();                        /* clean up */
  146. }
  147.